package com.demo.java.OD51_100.OD51;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【相同数字的积木游戏 1】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145585882
 */
public class OdMain {
    // 计算数字出现位置之间的最大距离
    private static int solveMethod(int[] values) {
        int maxLen = -1;  // 初始化最大距离为 -1，若没有重复数字则返回 -1

        if (values.length == 0) {
            return maxLen;  // 空序列，返回 -1
        }

        Map<Integer, Integer> numCountMap = new HashMap<>();

        // 统计每个数字的出现次数
        for (int i : values) {
            numCountMap.put(i, numCountMap.getOrDefault(i, 0) + 1);
        }

        // 如果每个数字都不重复，返回 -1
        if (numCountMap.size() == values.length) {
            return maxLen;
        }

        // 遍历哈希表，找到出现超过一次的数字，计算最大距离
        for (Map.Entry<Integer, Integer> entry : numCountMap.entrySet()) {
            Integer number = entry.getKey();
            Integer count = entry.getValue();

            if (count < 2) {
                continue;  // 跳过只出现一次的数字
            }

            int low = 0, high = values.length - 1;

            // 找到数字第一次出现的位置
            while (values[low] != number) {
                ++low;
            }

            // 找到数字最后一次出现的位置
            while (values[high] != number) {
                --high;
            }

            // 计算第一次和最后一次位置之间的距离，更新最大距离
            maxLen = Math.max(maxLen, high - low);
        }
        return maxLen;
    }

    // 主函数，读取输入并输出结果
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            int length = s.nextInt();  // 读取序列的长度
            int[] values = new int[length];

            // 读取数字序列
            for (int i = 0; i < length; ++i) {
                values[i] = s.nextInt();
            }

            // 调用方法计算结果
            int result = solveMethod(values);
            System.out.println(result);  // 输出结果
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");  // 处理输入错误
        }
    }
}